home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Games Extra 1996 September
/
Amiga Games Extra CD-ROM 9-1996.iso
/
userbox
/
demoversionen
/
dcf77 demo v3 beta
/
für programmierer
/
dcf77-datenaustausch
next >
Wrap
Text File
|
1996-05-11
|
3KB
|
82 lines
DCF77: Wie man den Status des Empfangsprogramms erfahren kann
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Damit andere Programme ermitteln können, ob DCF77 die Systemzeit
erfolgreich eingestellt hat, besitzt das Programm eine Datenstruktur, die
eine öffentliche SignalSemaphore zur Regelung des Zugriffs enthält.
Zum Zugriff auf die Struktur gelten die Regeln für die Benutzung von
Public Shared SignalSemaphoren. Es sollte nur lesend zugegriffen werden.
Die Semaphore ist unter dem Namen "DCF77 State" zu finden.
struct DCF77StateList
{
struct SignalSemaphore sl_Semaphore; // die Semaphore "DCF77 State"
STRPTR version; // Zeiger auf die Version von DCF77 (z.B. "1.74")
BOOL Received; // FALSE: keine DCF77-Zeit | TRUE: Systemzeit gestellt.
// Die nachfolgenden Werte existieren erst ab DCF77 Version 2.18:
LONG ReceiverState; // 0 - kein Signal. 1 - Empfang gestört.
// 2 - Warte auf Synchronisation. 3 - Empfang läuft.
// 4 - Programm inaktiv
LONG TimeLeft; // voraussichtl. Dauer [s] bis zum nächsten Stellen
// der Zeit
LONG LastError; // noch nicht implementiert (z.Z. immer Null)
};
Als Beispiel zur Benutzung der Struktur finden Sie in diesem Verzeichnis
die Sourcecodes der Hilfsprogramme WaitForDCF77 und WaitDCF77ifCrash.
Bei der Weiterentwicklung des Programms ist eine Ergänzung der Struktur
um weitere Angaben möglich.
Genaueres über Semaphoren finden Sie ab Seite 509 in
Amiga ROM Kernel Reference Manual: Libraries, Third Edition
Addison-Wesley Publishing Company, Inc. 1992
ISBN 0-201-56774-1
Wenn die Versionsnummer von DCF77 abgefragt werden soll, kann das z.B.
auf folgende Weise geschehen:
struct DCF77StateList *DCF77PublicState;
UBYTE *DCF77SemaphoreName="DCF77 State";
LONG DCFVersion, DCFRevision, Characters;
Forbid();
if(DCF77PublicState=(struct DCF77StateList *) FindSemaphore(DCF77SemaphoreName))
{
ObtainSemaphoreShared((struct SignalSemaphore *) DCF77PublicState);
// Jetzt kann auf die bis Version 2.17 vorhandenen Werte zugegriffen
// werden...
Characters=StrToLong(DCF77PublicState->Version,&DCFVersion);
Characters=StrToLong(DCF77PublicState->Version+Characters+1,&DCFRevision);
if(DCFVersion>2 || DCFVersion==2 && DCFRevision>=18)
{
// ...und jetzt auf die ab Version 2.18 vorhandenen Werte.
}
ReleaseSemaphore((struct SignalSemaphore *) DCF77PublicState);
}
else
{
// DCF77 läuft nicht
}
Permit();
Wie Sie sehen, müssen Zugriffe auf eine Semaphore mit Forbid()/Permit()
abgesichert werden. Um das Systemverhalten nicht zu beeinträchtigen,
sollten Sie diesen Vorgang möglichst kurz gestalten; am besten kopieren
Sie benötigte Werte in Hilfsvariablen und werten sie erst nach dem
Permit() aus.